/**
 * setupLocales
 * 设置国际化
 */
import { ref } from "vue";
// import dayjs from 'dayjs';
import { setupI18n, loadLocalesMapFromDir } from "@sfx-vue-lib/locales";
import { useUserStore } from "@sfx-vue-lib/stores";

import type { App } from "vue";
import type { Language } from "element-plus/es/locale";
import type { LaunchOptions } from "@sfx-lib/core";
import type { InitLocaleOptions, LanguageKey } from "@sfx-vue-lib/common";

import { modules, regex } from "./modules";

// element-plus 语言包
import enLocaleElementPlus from "element-plus/es/locale/lang/en";
import cnLocaleElementPlus from "element-plus/es/locale/lang/zh-cn";

// import { preferences } from '@vben/preferences';
// ----------------------------------------------------------------------------
/**
 * 设国际化
 * @param app
 * @param options web 应用启动选项
 * @description 每个app使用的国际化可能不同，这里用于扩展国际化的功能，
 * 例如扩展 dayjs、antd 组件库的多语言切换，以及app本身的国际化文件。
 */
async function setupLocales(app: App, options: LaunchOptions) {
    // options
    const { workspace } = options;
    //  根据 workspace + useLocaleStores 获取语言选项 languageKey
    const languageKey = "zh-CN";

    const initLocaleOptions: InitLocaleOptions = {
        // defaultLocale: preferences.app.locale,
        defaultLocale: languageKey,
        loadMessages: loadAppMessages,
        missingWarn: !import.meta.env.PROD,
        ...options,
    };

    return await setupI18n(app, initLocaleOptions);
}

/**
 * 加载应用特有的语言包
 * 这里也可以改造为从服务端获取翻译数据
 * @param lang
 */
async function loadAppMessages(lang: LanguageKey) {
    const localesMap = loadLocalesMapFromDir(regex, modules);
    const [appLocaleMessages] = await Promise.all([
        //
        localesMap[lang]?.(),
        loadThirdPartyMessage(lang),
    ]);
    return appLocaleMessages?.default;
}

/**
 * 加载第三方组件库的语言包
 * @param lang
 */
async function loadThirdPartyMessage(lang: LanguageKey) {
    await Promise.all([_loadElementLocale(lang), _loadDayjsLocale(lang)]);
}

/**
 * 加载dayjs的语言包
 * @param lang
 */
async function _loadDayjsLocale(lang: LanguageKey) {
    // let locale;
    // switch (lang) {
    //   case 'en': {
    //     locale = await import('dayjs/locale/en');
    //     break;
    //   }
    //   case 'zh-CN': {
    //     locale = await import('dayjs/locale/zh-cn');
    //     break;
    //   }
    //   // 默认使用英语
    //   default: {
    //     locale = await import('dayjs/locale/en');
    //   }
    // }
    // if (locale) {
    //   dayjs.locale(locale);
    // } else {
    //   console.error(`Failed to load dayjs locale for ${lang}`);
    // }
}

const elementLocale = ref<Language>(cnLocaleElementPlus);
/**
 * 加载 element-plus 的语言包
 * @param lang
 */
async function _loadElementLocale(lang: LanguageKey) {
    switch (lang) {
        case "en": {
            elementLocale.value = enLocaleElementPlus;
            break;
        }
        case "zh-CN": {
            elementLocale.value = cnLocaleElementPlus;
            break;
        }
    }
}

// ----------------------------------------------------------------------------
export { setupLocales, elementLocale, setupLocales as default };
// ----------------------------------------------------------------------------
